From 6f2797a2e7272819cc735563c4e96b8872ad2adf Mon Sep 17 00:00:00 2001 From: tsteven4 Date: Wed, 26 Mar 2014 02:41:42 +0000 Subject: [PATCH] add support for UrlLink types. --- gpsbabel/defs.h | 9 +++++++++ gpsbabel/gpx.cc | 10 +++++++++- gpsbabel/reference/multiple-links-2.gpx | 2 +- gpsbabel/reference/multiple-links-2~gpx.gpx | 1 + gpsbabel/waypt.cc | 6 ++++++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/gpsbabel/defs.h b/gpsbabel/defs.h index 7a3510c88..f9885226b 100644 --- a/gpsbabel/defs.h +++ b/gpsbabel/defs.h @@ -360,8 +360,14 @@ public: url_(url), url_link_text_(url_link_text) { } + UrlLink(const QString url, const QString url_link_text, const QString url_link_type) : + url_(url), + url_link_text_(url_link_text), + url_link_type_(url_link_type) + { } QString url_; QString url_link_text_; + QString url_link_type_; }; @@ -654,6 +660,9 @@ unsigned int waypt_count(void); void set_waypt_count(unsigned int nc); void waypt_add_url(Waypoint* wpt, const QString& link, const QString& url_link_text); +void waypt_add_url(Waypoint* wpt, const QString& link, + const QString& url_link_text, + const QString& url_link_type); void xcsv_setup_internal_style(const char* style_buf); void xcsv_read_internal_style(const char* style_buf); Waypoint* find_waypt_by_name(const QString& name); diff --git a/gpsbabel/gpx.cc b/gpsbabel/gpx.cc index f6dbad0d9..472accbc0 100644 --- a/gpsbabel/gpx.cc +++ b/gpsbabel/gpx.cc @@ -57,6 +57,7 @@ static gpsbabel::XmlStreamWriter* writer; static short_handle mkshort_handle; static QString link_url; static QString link_text; +static QString link_type; static char* snlen = NULL; @@ -105,6 +106,7 @@ typedef enum { tt_wpttype_urlname, /* Not in GPX 1.1 */ tt_wpttype_link, /* New in GPX 1.1 */ tt_wpttype_link_text, /* New in GPX 1.1 */ + tt_wpttype_link_type, /* New in GPX 1.1 */ tt_wpttype_sym, tt_wpttype_type, tt_wpttype_fix, @@ -386,6 +388,7 @@ tag_mapping tag_path_map[] = { GPXWPTTYPETAG(tt_wpttype_urlname, 0, "urlname"), /* GPX 1.0 */ GPXWPTTYPETAG(tt_wpttype_link, 0, "link"), /* GPX 1.1 */ GPXWPTTYPETAG(tt_wpttype_link_text, 0, "link/text"), /* GPX 1.1 */ + GPXWPTTYPETAG(tt_wpttype_link_type, 0, "link/type"), /* GPX 1.1 */ GPXWPTTYPETAG(tt_wpttype_sym, 0, "sym"), GPXWPTTYPETAG(tt_wpttype_type, 1, "type"), GPXWPTTYPETAG(tt_wpttype_fix, 0, "fix"), @@ -1109,13 +1112,17 @@ gpx_end(const QString& el) link_->url_link_text_ = cdatastr; break; case tt_wpttype_link: - waypt_add_url(wpt_tmp, link_url, link_text); + waypt_add_url(wpt_tmp, link_url, link_text, link_type); + link_type = QString(); link_text = QString(); link_url = QString(); break; case tt_wpttype_link_text: link_text = cdatastr.trimmed(); break; + case tt_wpttype_link_type: + link_type = cdatastr.trimmed(); + break; case tt_unknown: end_something_else(); return; @@ -1353,6 +1360,7 @@ write_gpx_url(const Waypoint* waypointp) writer->writeStartElement("link"); writer->writeAttribute("href", l.url_); writer->writeOptionalTextElement("text", l.url_link_text_); + writer->writeOptionalTextElement("type", l.url_link_type_); writer->writeEndElement(); } return; diff --git a/gpsbabel/reference/multiple-links-2.gpx b/gpsbabel/reference/multiple-links-2.gpx index 4162e1233..b733fb110 100644 --- a/gpsbabel/reference/multiple-links-2.gpx +++ b/gpsbabel/reference/multiple-links-2.gpx @@ -12,7 +12,7 @@ one - not me + text/html two dots diff --git a/gpsbabel/reference/multiple-links-2~gpx.gpx b/gpsbabel/reference/multiple-links-2~gpx.gpx index f5b2bab4c..07c0f1b72 100644 --- a/gpsbabel/reference/multiple-links-2~gpx.gpx +++ b/gpsbabel/reference/multiple-links-2~gpx.gpx @@ -12,6 +12,7 @@ one + text/html two dots diff --git a/gpsbabel/waypt.cc b/gpsbabel/waypt.cc index c84ebb37d..876c5abb2 100644 --- a/gpsbabel/waypt.cc +++ b/gpsbabel/waypt.cc @@ -417,6 +417,12 @@ waypt_add_url(Waypoint* wpt, const QString& link, const QString& url_link_text) wpt->url_link_list_.push_back(UrlLink(link, url_link_text)); } +void +waypt_add_url(Waypoint* wpt, const QString& link, const QString& url_link_text, const QString& url_link_type) +{ + wpt->url_link_list_.push_back(UrlLink(link, url_link_text, url_link_type)); +} + double gcgeodist(const double lat1, const double lon1, const double lat2, const double lon2) -- 2.30.2